﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Telerik.Web.UI;
using SMA.GENTEv1;

public partial class Protegidos_Empresas_Documentos_edLegalAcoesJudiciais : PageBase 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (!IsPostBack)
            {
                CarregaComboProcesso(rcbProcesso);
                CarregaComboReclamante(rcbReclamante);
                OcultaCampos(true);

                if (Session["WorkFlow"] != null)
                    Session["WorkFlow"] = null;
            }
        }
        catch (Exception ex)
        {
            lblResultado.Text = ex.Message;
        }
    }

    #region Eventos
    protected void btnPesquisar_Click(object sender, EventArgs e)
    {
        try
        {
            Pesquisa();
            rgProcessos.DataBind();
            OcultaCampos(false);
        }
        catch (Exception ex)
        {
            lblResultado.Text = ex.Message;
        }
    }

    protected void btnIncluir_Click(object sender, EventArgs e)
    {
        Server.Transfer("edLegalCadAcoesJudiciais.aspx");
    }

    protected void btnLimpar_Click(object sender, EventArgs e)
    {
        foreach (RadComboBoxItem item in rcbProcesso.Items)
        {
            CheckBox chk = (CheckBox)item.FindControl("chk1");
            chk.Checked = true;
        }
        rcbProcesso.SelectedIndex = -1;

        foreach (RadComboBoxItem item in rcbReclamante.Items)
        {
            CheckBox chk = (CheckBox)item.FindControl("chk1");
            chk.Checked = true;
        }
        rcbReclamante.SelectedIndex = -1;

        OcultaCampos(true);
    }

    protected void rgProcessos_ItemCommand(object source, Telerik.Web.UI.GridCommandEventArgs e)
    {
        if (e.CommandName == "Select")
        {
            int idreclamante = Int32.Parse(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["IdReclamanteProcesso"].ToString());

            Server.Transfer("edLegalAltAcoesJudiciais.aspx?idReclamante=" + idreclamante.ToString());
        }
    }

    protected void rgProcessos_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
    {
        Pesquisa();
    }

    protected void rgProcessos_DeleteCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
    {
        try
        {
            lblResultado.Text = "";

            //AcoesLegaisProcesso processo = new AcoesLegaisProcesso();

            //GridEditableItem editedItem = e.Item as GridEditableItem;

            //int idprocesso = int.Parse(editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["IdProcesso"].ToString());
            //processo.IdProcesso = idprocesso;
            //processo.Excluir();
        }
        catch (Exception ex)
        {
            lblResultado.Text = ex.Message;
        }
    }

    protected void RadAjaxManager1_AjaxRequest(object sender, AjaxRequestEventArgs e)
    {
        CarregaComboProcesso(rcbProcesso);
        CarregaComboReclamante(rcbReclamante);
        Pesquisa();
        rgProcessos.DataBind();
    }
    #endregion

    #region Metodos
    private void CarregaComboProcesso(RadComboBox combo)
    {
        AcoesLegaisProcesso processo = new AcoesLegaisProcesso();
        List<AcoesLegaisProcesso> listProcesso = new List<AcoesLegaisProcesso>();

        DataTable comboProcesso = new DataTable();

        DataColumn colIdProcesso = new DataColumn();
        colIdProcesso.ColumnName = "IdProcesso";
        colIdProcesso.DataType = Type.GetType("System.Int32");
        comboProcesso.Columns.Add(colIdProcesso);

        DataColumn colNumProcesso = new DataColumn();
        colNumProcesso.ColumnName = "NumProcesso";
        colNumProcesso.DataType = Type.GetType("System.String");
        comboProcesso.Columns.Add(colNumProcesso);

        listProcesso = processo.SelectProcessoCombo(IdPrestador);

        string[] listCodigo = new string[listProcesso.Count];
        int i = 0;

        DataRow linProcesso;
        foreach (AcoesLegaisProcesso proc in listProcesso)
        {
            bool verifica = listCodigo.Contains(proc.NumProcesso);

            if (!verifica)
            {
                linProcesso = comboProcesso.NewRow();

                linProcesso["IdProcesso"] = proc.IdProcesso;
                linProcesso["NumProcesso"] = proc.NumProcesso;
                comboProcesso.Rows.Add(linProcesso);

                listCodigo[i] = proc.NumProcesso;
                i++;
            }
        }

        combo.DataSource = comboProcesso;
        combo.DataBind();

        // tratamento para situação de selecionar o ano conforme o link do e-mail para os respectivo documento
        if (Session["WorkFlow"] != null)
        {
            RadComboBoxItem itemProcesso = combo.FindItemByValue(Request.QueryString["ProcessoWF"].ToString());
            if (itemProcesso == null)
            {
                AcoesLegaisProcesso procWF = new AcoesLegaisProcesso(int.Parse(Request.QueryString["ProcessoWF"].ToString()), true, false, false, false);

                linProcesso = comboProcesso.NewRow();
                linProcesso["IdProcesso"] = procWF.IdProcesso;
                linProcesso["NumProcesso"] = procWF.NumProcesso;

                comboProcesso.Rows.Add(linProcesso);

                combo.DataSource = comboProcesso;
                combo.DataBind();

                itemProcesso = combo.FindItemByValue(Request.QueryString["ProcessoWF"].ToString());
            }

            foreach (RadComboBoxItem item in combo.Items)
            {
                if (item.Index != itemProcesso.Index)
                {
                    CheckBox chk = (CheckBox)item.FindControl("chk1");
                    chk.Checked = false;
                }
            }
            combo.SelectedIndex = itemProcesso.Index;
        }
        else
        {
            combo.SelectedIndex = 0;
        }
    }

    private void CarregaComboReclamante(RadComboBox combo)
    {
        AcoesLegaisReclamante reclamante = new AcoesLegaisReclamante();
        List<AcoesLegaisReclamante> listReclamante = new List<AcoesLegaisReclamante>();

        listReclamante = reclamante.SelectReclamantesCombo(IdPrestador);

        DataTable comboReclamante = new DataTable();

        DataColumn colIdReclamente = new DataColumn();
        colIdReclamente.ColumnName = "IdPessoa";
        colIdReclamente.DataType = Type.GetType("System.Int32");
        comboReclamante.Columns.Add(colIdReclamente);

        DataColumn colNomeCompleto = new DataColumn();
        colNomeCompleto.ColumnName = "NomeCompleto";
        colNomeCompleto.DataType = Type.GetType("System.String");
        comboReclamante.Columns.Add(colNomeCompleto);

        int[] listCodigo = new int[listReclamante.Count];
        int i = 0;

        DataRow linReclamante;
        foreach (AcoesLegaisReclamante reclam in listReclamante)
        {
            bool verifica = listCodigo.Contains(reclam.PessoaReclamante.IdPessoa);

            if (!verifica)
            {
                linReclamante = comboReclamante.NewRow();

                linReclamante["IdPessoa"] = reclam.PessoaReclamante.IdPessoa;
                linReclamante["NomeCompleto"] = reclam.PessoaReclamante.Nome;
                comboReclamante.Rows.Add(linReclamante);

                listCodigo[i] = reclam.PessoaReclamante.IdPessoa;
                i++;
            }
        }

        combo.DataSource = comboReclamante;
        combo.DataBind();

        // tratamento para situação de selecionar o ano conforme o link do e-mail para os respectivo documento
        if (Session["WorkFlow"] != null)
        {
            RadComboBoxItem itemReclamante = combo.FindItemByValue(Request.QueryString["ReclamanteWF"].ToString());
            if (itemReclamante == null)
            {
                AcoesLegaisReclamante reclamWF = new AcoesLegaisReclamante(int.Parse(Request.QueryString["ReclamanteWF"].ToString()), true, false, true, false);

                linReclamante = comboReclamante.NewRow();
                linReclamante["IdPessoa"] = reclamWF.PessoaReclamante.IdPessoa;
                linReclamante["NomeCompleto"] = reclamWF.PessoaReclamante.Nome;

                comboReclamante.Rows.Add(linReclamante);

                combo.DataSource = comboReclamante;
                combo.DataBind();

                itemReclamante = combo.FindItemByValue(Request.QueryString["ReclamanteWF"].ToString());
            }

            foreach (RadComboBoxItem item in combo.Items)
            {
                if (item.Index != itemReclamante.Index)
                {
                    CheckBox chk = (CheckBox)item.FindControl("chk1");
                    chk.Checked = false;
                }
            }
            combo.SelectedIndex = itemReclamante.Index;
        }
        else
        {
            combo.SelectedIndex = 0;
        }
    }

    private void OcultaCampos(bool oculta)
    {
        trResultado.Visible = !oculta;
    }

    private void Pesquisa()
    {
        rgProcessos.DataSource = CarregaProcessos();
    }

    private DataTable CarregaProcessos()
    {
        AcoesLegaisReclamante reclamante = new AcoesLegaisReclamante();
        List<AcoesLegaisReclamante> listProcessos = new List<AcoesLegaisReclamante>();

        List<int> processosSel = new List<int>();
        foreach (RadComboBoxItem item in rcbProcesso.Items)
        {
            CheckBox chk = (CheckBox)item.FindControl("chk1");
            if (chk.Checked)
            {
                processosSel.Add(int.Parse(item.Value));
            }
        }

        List<int> reclamantesSel = new List<int>();
        foreach (RadComboBoxItem item in rcbReclamante.Items)
        {
            CheckBox chk = (CheckBox)item.FindControl("chk1");
            if (chk.Checked)
            {
                reclamantesSel.Add(int.Parse(item.Value));
            }
        }

        int[] _processos = new int[processosSel.Count];
        for (int i = 0; i < processosSel.Count; i++)
        {
            _processos[i] = processosSel[i];
        }

        int[] _pessoas = new int[reclamantesSel.Count];
        for (int i = 0; i < reclamantesSel.Count; i++)
        {
            _pessoas[i] = reclamantesSel[i];
        }

        listProcessos = reclamante.SelectReclamantes(_pessoas, _processos, true, true);

        DataTable exibirdados = new DataTable();

        DataColumn colIdProcesso = new DataColumn();
        colIdProcesso.ColumnName = "IdReclamanteProcesso";
        colIdProcesso.DataType = Type.GetType("System.Int32");
        exibirdados.Columns.Add(colIdProcesso);

        DataColumn colNumProcesso = new DataColumn();
        colNumProcesso.ColumnName = "NumProcesso";
        colNumProcesso.DataType = Type.GetType("System.String");
        exibirdados.Columns.Add(colNumProcesso);

        DataColumn colReclamante = new DataColumn();
        colReclamante.ColumnName = "Reclamante";
        colReclamante.DataType = Type.GetType("System.String");
        exibirdados.Columns.Add(colReclamante);

        DataColumn colDataAbertura = new DataColumn();
        colDataAbertura.ColumnName = "DtAberturaProc";
        colDataAbertura.DataType = Type.GetType("System.DateTime");
        exibirdados.Columns.Add(colDataAbertura);

        DataColumn colDataTermino = new DataColumn();
        colDataTermino.ColumnName = "DtFimProcesso";
        colDataTermino.DataType = Type.GetType("System.DateTime");
        exibirdados.Columns.Add(colDataTermino);

        DataColumn colPath = new DataColumn();
        colPath.ColumnName = "Path";
        colPath.DataType = Type.GetType("System.String");
        exibirdados.Columns.Add(colPath);

        DataRow linRegistro;
        foreach (AcoesLegaisReclamante reclam in listProcessos)
        {
            for (int i = 0; i < reclam.Processo.Count; i++)
            {
                linRegistro = exibirdados.NewRow();

                linRegistro["IdReclamanteProcesso"] = reclam.IdReclamanteProcesso;
                linRegistro["NumProcesso"] = reclam.Processo[i].NumProcesso;
                linRegistro["Reclamante"] = reclam.PessoaReclamante.Nome;
                linRegistro["DtAberturaProc"] = reclam.Processo[i].DtAberturaProc;
                if (reclam.Processo[i].DtFimProcesso != null)
                    linRegistro["DtFimProcesso"] = reclam.Processo[i].DtFimProcesso;
                if (reclam.Historico[i].Imagem.Path != string.Empty)
                    linRegistro["Path"] = reclam.Historico[i].Imagem.Path;

                exibirdados.Rows.Add(linRegistro);
            }
        }

        return exibirdados;
    }
    #endregion
}
